// // import { Component } from 'react';
// // import { Provider } from 'react-redux';
// // import Taro from '@tarojs/taro';
// //
// //
// // import { isH5, isWeapp } from '/@/utils/util';
// // import dva from './dva';
// //
// // import 'taro-ui/dist/style/index.scss';
// // import './app.scss';
//
// //开启React Devtools
// if (isH5()) {
//   if (!Taro.useShareAppMessage) {
//     Taro.useShareAppMessage = () => {}
//   }
// }
//
// const devApp = dva.createApp({
//   initialState: {},
//   enableLog: false,
//   models: [],
// });
// const store = devApp.getStore();
//
// class App extends Component {
//
//   componentDidMount () {
//     isWeapp() && this.updateWeapp()
//   }
//
//   updateWeapp() {
//     if (Taro.canIUse('getUpdateManager')) {
//       const updateManager = Taro.getUpdateManager();
//       updateManager.onCheckForUpdate(() => {
//         console.log('正在检查软件版本,请稍后...');
//       });
//       updateManager.onUpdateReady(() => {
//         Taro.showModal({
//           title: '更新提示',
//           content: '新版本已经准备好，是否重启应用？',
//           success: function(res) {
//             if (res.confirm) {
//               updateManager.applyUpdate();
//             }
//           },
//         });
//       });
//       updateManager.onUpdateFailed(() => {
//         Taro.showModal({
//           title: '更新提示',
//           content: '新版本下载失败，请检查你的微信',
//           showCancel: false,
//         });
//       });
//     } else {
//       Taro.showModal({
//         title: '微信版本过低',
//         content: '当前微信版本过低，部分功能无法使用，请升级到最新版本',
//         showCancel: false,
//       });
//     }
//   }
//
//
//   // this.props.children 是将要会渲染的页面
//   render () {
//     return <Provider store={store}> {this.props.children} </Provider>
//   }
// }
//
// export default App
import {useState, useEffect} from "react";
import {useDidShow} from "@tarojs/runtime";
import Taro from '@tarojs/taro';
import * as urls from './constants/apiPath';
import UserInfoContext from './contexts/UserInfo';
import {TOKEN, TokenContext} from './contexts/Token';
import {isWeapp, showToast} from "./utils/util";
import {post} from "./utils/request";


import './app.scss';

const App = ({children}) => {

  const [token, setToken] = useState({});
  const [userInfo, setUserInfo] = useState({})
  useDidShow(()=>{
    // 检查应用版本更新
    isWeapp() && updateWeapp()
  });
  const updateWeapp = () => {
    if (Taro.canIUse('getUpdateManager')) {
      const updateManager = Taro.getUpdateManager();
      updateManager.onCheckForUpdate(() => {
        console.log('正在检查软件版本,请稍后...');
      });
      updateManager.onUpdateReady(() => {
        Taro.showModal({
          title: '更新提示',
          content: '新版本已经准备好，是否重启应用？',
          success: function(res) {
            if (res.confirm) {
              updateManager.applyUpdate();
            }
          },
        });
      });
      updateManager.onUpdateFailed(() => {
        Taro.showModal({
          title: '更新提示',
          content: '新版本下载失败，请检查你的微信',
          showCancel: false,
        });
      });
    } else {
      Taro.showModal({
        title: '微信版本过低',
        content: '当前微信版本过低，部分功能无法使用，请升级到最新版本',
        showCancel: false,
      });
    }
  }
  const invalidUser = async (text) => {
    await showToast(text);
    setToken({});
    Taro.setStorageSync(TOKEN, {});
  };
  useEffect(()=>{
    try {
      setToken(Taro.getStorageSync(TOKEN))
    }catch (e) {}
  },[])
  useEffect(()=>{
    if (Object.keys(token).length > 0) {
      post(urls.userInfo, {data: token}).then(rs=>{
        if (rs.code === 1000) {
          setUserInfo(rs.data);
        } else if (rs.code === 1003) {
          // token失效
          post(urls.refreshToken, {data: token}).then((res)=>{
            if (res.ok && res.data) {
              const t = {token: res.data?.token, refreshToken: res.data?.refreshToken};
              setToken(t);
              Taro.setStorageSync(TOKEN, t);
            }else {
              invalidUser('用户信息已过期').then();
            }
          })
        } else {
          invalidUser('用户不存在').then()
        }
      })
    }
  },[token])
  // eslint-disable-next-line react/jsx-filename-extension
  return (<TokenContext.Provider value={{value: token,setToken: setToken}}>
    <UserInfoContext.Provider value={{ info: userInfo,setInfo: setUserInfo, refresh: (v) => {setUserInfo(v)} }}  >
      {children}
    </UserInfoContext.Provider>
  </TokenContext.Provider>)
}
export default App;


